/**
 * Project:   warnme-app
 * File:      RestUtils.java
 * License: 
 *            This file is licensed under GNU General Public License version 3
 *            http://www.gnu.org/licenses/gpl-3.0.txt
 *
 * Copyright: Bartosz Cichecki [ cichecki.bartosz@gmail.com ]
 * Date:      24-12-2012
 */

package dtu.ds.warnme.app.ws.client.restful.utils;

import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.message.BasicHeader;

import android.util.Log;
import dtu.ds.warnme.app.application.Prefs;
import dtu.ds.warnme.app.utils.SecurityUtils;
import dtu.ds.warnme.app.ws.client.https.utils.HttpConstants;
import dtu.ds.warnme.app.ws.client.restful.RestClient;

/**
 * @author Bartosz Cichecki
 * 
 */
public class RestUtils {

	private static final String TAG = "RestUtils";

	public static void decorareHeaderWithContentType(List<Header> headers, String contentType) {
		headers.add(new BasicHeader(HttpConstants.CONTENT_TYPE, contentType));
	}

	public static void decorareHeaderWithMD5(List<Header> headers, String content) {
		if (Prefs.isCheckOutgoingMD5()) {
			headers.add(new BasicHeader(HttpConstants.CONTENT_MD5, SecurityUtils.hashMD5Base64(content)));
		}
	}

	public static String getAbsoluteAddress(RestClient rc, String... resourceSuffixes) {
		StringBuilder absoluteAddress = new StringBuilder();
		absoluteAddress.append(HttpConstants.PROTOCOL_HTTPS).append(rc.getHost()).append(HttpConstants.COLON).append(rc.getPort())
		        .append(rc.getWsContextPath());
		for (String resourceSuffix : resourceSuffixes) {
			if (!resourceSuffix.startsWith(HttpConstants.PATH_SEPARATOR)) {
				absoluteAddress.append(HttpConstants.PATH_SEPARATOR);
			}
			if (resourceSuffix.endsWith(HttpConstants.PATH_SEPARATOR)) {
				resourceSuffix = StringUtils.substringBeforeLast(resourceSuffix, HttpConstants.PATH_SEPARATOR);
			}
			absoluteAddress.append(resourceSuffix);
		}

		Log.d(TAG, "Constructed address: " + absoluteAddress.toString());

		return absoluteAddress.toString();
	}

	public static String getCommaSeparatedString(Object[] objs) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < objs.length; i++) {
			sb.append(objs[i]);
			if (i < objs.length - 1) {
				sb.append(",");
			}
		}
		return sb.toString();
	}

	public static Header[] getHeadersAsArray(List<Header> headers) {
		return headers.toArray(new Header[headers.size()]);
	}
}
